﻿/**
 * 文件名称:
 * 作者姓名:
 * 当前版本:
 * 前继版本:
 * 修改时间:
 * 修改人员:
 * 备注信息:
 * 未完成  :
 */ 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace com.hebg3.cmd {  
  /**CommandDo类
   * 调用DOS命令,不显示DOS窗口并获得DOS输出工具类
   * 
   */
  public class CommandDo {
    /**
     * 执行DOS命令，返回DOS命令的输出
     * dos命令
     * 返回输出，如果发生异常，返回空字符串
     */    
    public static string execute(string dosCommand) {
      return execute(dosCommand, 6 * 1000);
    }
    /**excute方法
     * 执行DOS命令，返回DOS命令的输出
     * 等待命令执行的时间（单位：毫秒），如果设定为0，则无限等待
     * 返回输出，
     * 如果发生异常，返回空字符串
     */      
    public static string execute(string dosCommand, int milliseconds) {
      string output = "";     //输出字符串
      if( dosCommand != null && dosCommand != "" ) {
        Process process = new Process();     //创建进程对象
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.FileName = "cmd.exe";      //设定需要执行的命令
        startInfo.Arguments = "/C " + dosCommand;   //设定参数，其中的“/C”表示执行完命令后马上退出
        startInfo.UseShellExecute = false;     //不使用系统外壳程序启动
        startInfo.RedirectStandardInput = false;   //不重定向输入
        startInfo.RedirectStandardOutput = true;   //重定向输出
        startInfo.CreateNoWindow = true;     //不创建窗口
        process.StartInfo = startInfo;
        try {
          if( process.Start() )       //开始进程
                {
            if( milliseconds == 0 )
              process.WaitForExit();     //这里无限等待进程结束
            else
              process.WaitForExit(milliseconds);  //这里等待进程结束，等待时间为指定的毫秒
            output = process.StandardOutput.ReadToEnd();//读取进程的输出
          }
        } catch (Exception e){
          Console.WriteLine("Error:"+e.Message);
        } finally {
          if( process != null )
            process.Close();
        }
      }
      return output;
    }
    public static String execute(List<String> commands, int millinSeconds) {
      String str = null;
      if( commands != null && commands.Count > 0 ) {
        Process p = new Process();
        p.StartInfo = new ProcessStartInfo("CMD");

        p.StartInfo.RedirectStandardInput = true;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.CreateNoWindow = true;
        p.Start();
        StringBuilder builder = new StringBuilder();
        foreach( String cmd in commands ) {
          p.StandardInput.WriteLine(cmd);
          //char[] buf = new char[1000];
          //builder.Append(p.StandardOutput.ReadBlock(buf,0,1000));
          
        }
        //String s = builder.ToString();
        
        p.StandardInput.WriteLine("exit");
        str = p.StandardOutput.ReadToEnd();
        //str = builder.ToString();
      }

      return str;
    }
  }
}